package com.java.secnity;

import org.springframework.util.StringUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class AuthChecher {
    /**
     * 此方法用于校验信息
     *true表示角色验证通过，false表示角色验证失败
     */
    public static boolean  check(List<String> roleList, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //如果方法上有admin权限就能操作该方法否则不能操作该方法
        if(roleList.contains(Role.ADMIN.name())){
            return  true;
        }
        //其他情况就得校验用户的角色信息，用户的角色信息很多情况从session中获取
        HttpSession session = request.getSession();
       //拿到当前用户的角色
        String user_role_key = (String) session.getAttribute("user_role_key");
        //如果用户没有角色就直接跳转到unauthorization告诉用户没有权限
        if(StringUtils.isEmpty(user_role_key)||user_role_key==null){
            request.getRequestDispatcher("/admin/unauthorization.html").forward(request,response);
            return false;
        }

        //循环将注解上的权限与用户的权限进行比较
        for(String role:roleList){
           if(user_role_key.equalsIgnoreCase(role)){
               return true;
           }
        }
        //如果用户没有角色就直接跳转到unauthorization告诉用户没有权限
        request.getRequestDispatcher("/admin/unauthorization.html").forward(request,response);
        return false;
    }
}
